This is a source of the Demo application for OPC “Classic” that ships with the OPC Data Client.NET product. The application shows most product functions, including the browsing forms, OPC property access, and event-based subscriptions.
The main form:
// $Header: $ // Copyright (c) CODE Consulting and Development, s.r.o., Plzen. All rights reserved. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System.Diagnostics; using EasyOpcNetDemo.Properties; using JetBrains.Annotations; using OpcLabs.BaseLib.ComInterop; using OpcLabs.EasyOpc.DataAccess; using System; using System.Globalization; using System.Reflection; using System.Windows.Forms; using OpcLabs.EasyOpc.DataAccess.OperationModel; using OpcLabs.EasyOpc.OperationModel; [assembly:CLSCompliant(true)] namespace EasyOpcNetDemo { public partial class MainForm : Form { // ReSharper disable once NotNullMemberIsNotInitialized public MainForm() { InitializeComponent(); } // ReSharper disable InconsistentNaming private void browseServersButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); opcServerDialog1.Location = machineNameTextBox.Text; if (opcServerDialog1.ShowDialog(this) == DialogResult.OK) { Debug.Assert(opcServerDialog1.ServerElement != null); serverClassTextBox.Text = opcServerDialog1.ServerElement.ServerClass; } } // ReSharper disable InconsistentNaming private void browseItemsButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); daItemDialog1.ServerDescriptor.MachineName = machineNameTextBox.Text; daItemDialog1.ServerDescriptor.ServerClass = serverClassTextBox.Text; if (daItemDialog1.ShowDialog() == DialogResult.OK) { Debug.Assert(daItemDialog1.NodeElement != null); itemIdTextBox.Text = daItemDialog1.NodeElement.ItemId; } } // ReSharper disable InconsistentNaming private void readItemButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); Debug.Assert(itemIdTextBox.Text != null); DAVtq vtq = null; Exception exception = null; try { vtq = easyDAClient1.ReadItem( machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text); } catch (OpcException ex) { exception = ex; } DisplayVtq(vtq); DisplayException(exception); } private void DisplayVtq(DAVtq vtq) { if (vtq is null) { valueTextBox.Text = ""; timestampTextBox.Text = ""; qualityTextBox.Text = ""; } else { valueTextBox.Text = vtq.DisplayValue(); timestampTextBox.Text = vtq.Timestamp.ToString(CultureInfo.CurrentCulture); qualityTextBox.Text = vtq.Quality.ToString(); } } private void DisplayException(Exception exception) { exceptionTextBox.Text = (exception is null) ? "" : exception.GetBaseException().Message; } private bool _isItemSubscribedValue/* = false*/; private int _itemHandle/* = 0*/; public bool IsItemSubscribed { get { return _isItemSubscribedValue; } set { _isItemSubscribedValue = value; subscribeItemButton.Enabled = !_isItemSubscribedValue; changeItemSubscriptionButton.Enabled = _isItemSubscribedValue; unsubscribeItemButton.Enabled = _isItemSubscribedValue; } } // ReSharper disable InconsistentNaming private void subscribeItemButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); Debug.Assert(itemIdTextBox.Text != null); const VarTypes dataType = VarTypes.Empty; // ReSharper disable SuggestUseVarKeywordEvident int requestedUpdateRate = (int)requestedUpdateRateNumericUpDown.Value; float percentDeadband = (float)percentDeadbandNumericUpDown.Value; // ReSharper restore SuggestUseVarKeywordEvident _itemHandle = easyDAClient1.SubscribeItem( machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, dataType, requestedUpdateRate, percentDeadband); IsItemSubscribed = true; } // ReSharper disable InconsistentNaming private void changeItemSubscriptionButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { var groupParameters = new DAGroupParameters( (int)requestedUpdateRateNumericUpDown.Value, (float)percentDeadbandNumericUpDown.Value); easyDAClient1.ChangeItemSubscription(_itemHandle, groupParameters); } // ReSharper disable InconsistentNaming private void unsubscribeItemButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { easyDAClient1.UnsubscribeItem(_itemHandle); _itemHandle = 0; IsItemSubscribed = false; } // ReSharper disable InconsistentNaming private void easyDAClient1_ItemChanged(object sender, EasyDAItemChangedEventArgs e) // ReSharper restore InconsistentNaming { DisplayVtq(e.Vtq); DisplayException(e.Exception); } // ReSharper disable InconsistentNaming private void browseMachinesButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { if (computerBrowserDialog1.ShowDialog() == DialogResult.OK) machineNameTextBox.Text = computerBrowserDialog1.SelectedName; } // ReSharper disable InconsistentNaming private void aboutButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { MessageBox.Show(this, Assembly.GetExecutingAssembly().FullName, Resources.MainForm_aboutButton_Click_Assembly_Name, MessageBoxButtons.OK, MessageBoxIcon.Information); } // ReSharper disable InconsistentNaming private void browsePropertiesButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); Debug.Assert(itemIdTextBox.Text != null); daPropertyDialog1.ServerDescriptor.MachineName = machineNameTextBox.Text; daPropertyDialog1.ServerDescriptor.ServerClass = serverClassTextBox.Text; daPropertyDialog1.NodeDescriptor = itemIdTextBox.Text; if (daPropertyDialog1.ShowDialog() == DialogResult.OK) { Debug.Assert(daPropertyDialog1.PropertyElement != null); propertyIdMaskedTextBox.Text = daPropertyDialog1.PropertyElement.PropertyId.ToString(); } } // ReSharper disable InconsistentNaming private void getPropertyValueButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); Debug.Assert(itemIdTextBox.Text != null); int propertyId = Convert.ToInt32(propertyIdMaskedTextBox.Text, CultureInfo.CurrentCulture); object value = null; Exception exception = null; try { value = easyDAClient1.GetPropertyValue( machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, propertyId); } catch (OpcException ex) { exception = ex; } propertyValueTextBox.Text = (value is null ? "(null)" : String.Format(CultureInfo.CurrentCulture, "{0}", value)); DisplayException(exception); } // ReSharper disable InconsistentNaming private void writeItemValueButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Debug.Assert(machineNameTextBox.Text != null); Debug.Assert(serverClassTextBox.Text != null); Debug.Assert(itemIdTextBox.Text != null); object value = valueToWriteTextBox.Text; Exception exception = null; try { easyDAClient1.WriteItemValue( machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, value); } catch (OpcException ex) { exception = ex; } DisplayException(exception); } // ReSharper disable InconsistentNaming private void closeButton_Click(object sender, EventArgs e) // ReSharper restore InconsistentNaming { Close(); } // ReSharper disable InconsistentNaming private void MainForm_Load(object sender, EventArgs e) // ReSharper restore InconsistentNaming { } } }
' $Header: $ ' Copyright (c) CODE Consulting and Development, s.r.o., Plzen. All rights reserved. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.BaseLib.ComInterop Imports OpcLabs.EasyOpc.DataAccess Imports System.Globalization Imports OpcLabs.EasyOpc.OperationModel Imports OpcLabs.EasyOpc.DataAccess.OperationModel <Assembly:CLSCompliant(True)> ' ReSharper disable CheckNamespace Namespace EasyOpcNetDemo ' ReSharper restore CheckNamespace Partial Public Class MainForm Inherits Form Public Sub New() InitializeComponent() End Sub ' ReSharper disable InconsistentNaming Private Sub browseServersButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles browseServersButton.Click ' ReSharper restore InconsistentNaming opcServerDialog1.Location = machineNameTextBox.Text If opcServerDialog1.ShowDialog(Me) = DialogResult.OK Then serverClassTextBox.Text = opcServerDialog1.ServerElement.ServerClass End If End Sub ' ReSharper disable InconsistentNaming Private Sub browseItemsButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles browseItemsButton.Click ' ReSharper restore InconsistentNaming opcDAItemDialog1.ServerDescriptor.MachineName = machineNameTextBox.Text opcDAItemDialog1.ServerDescriptor.ServerClass = serverClassTextBox.Text If opcDAItemDialog1.ShowDialog() = DialogResult.OK Then itemIdTextBox.Text = opcDAItemDialog1.NodeElement.ItemId End If End Sub ' ReSharper disable InconsistentNaming Private Sub readItemButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles readItemButton.Click ' ReSharper restore InconsistentNaming Dim vtq As DAVtq = Nothing Dim exception As Exception = Nothing Try vtq = easyDAClient1.ReadItem(machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text) Catch ex As OpcException exception = ex End Try DisplayVtq(vtq) DisplayException(exception) End Sub Private Sub DisplayVtq(ByVal vtq As DAVtq) If vtq Is Nothing Then valueTextBox.Text = "" timestampTextBox.Text = "" qualityTextBox.Text = "" Else valueTextBox.Text = vtq.DisplayValue() timestampTextBox.Text = vtq.Timestamp.ToString() qualityTextBox.Text = vtq.Quality.ToString() End If End Sub Private Sub DisplayException(ByVal exception As Exception) If CObj(exception) Is CObj(Nothing) Then exceptionTextBox.Text = "" Else exceptionTextBox.Text = exception.GetBaseException().Message End If End Sub Private _isItemSubscribedValue As Boolean ' = false Private _itemHandle As Integer ' = 0 Public Property IsItemSubscribed() As Boolean Get Return _isItemSubscribedValue End Get Set(ByVal value As Boolean) _isItemSubscribedValue = value subscribeItemButton.Enabled = Not _isItemSubscribedValue changeItemSubscriptionButton.Enabled = _isItemSubscribedValue unsubscribeItemButton.Enabled = _isItemSubscribedValue End Set End Property ' ReSharper disable InconsistentNaming Private Sub subscribeItemButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles subscribeItemButton.Click ' ReSharper restore InconsistentNaming Const dataType As Short = VarTypes.Empty Dim requestedUpdateRate As Integer = CInt(Fix(requestedUpdateRateNumericUpDown.Value)) Dim percentDeadband As Single = CSng(percentDeadbandNumericUpDown.Value) _itemHandle = easyDAClient1.SubscribeItem(machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, dataType, requestedUpdateRate, percentDeadband) IsItemSubscribed = True End Sub ' ReSharper disable InconsistentNaming Private Sub changeItemSubscriptionButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles changeItemSubscriptionButton.Click ' ReSharper restore InconsistentNaming Dim groupParameters = New DAGroupParameters(CInt(Fix(requestedUpdateRateNumericUpDown.Value)), CSng(percentDeadbandNumericUpDown.Value)) easyDAClient1.ChangeItemSubscription(_itemHandle, groupParameters) End Sub ' ReSharper disable InconsistentNaming Private Sub unsubscribeItemButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles unsubscribeItemButton.Click ' ReSharper restore InconsistentNaming easyDAClient1.UnsubscribeItem(_itemHandle) _itemHandle = 0 IsItemSubscribed = False End Sub ' ReSharper disable InconsistentNaming Private Sub easyDAClient1_ItemChanged(ByVal sender As Object, ByVal e As EasyDAItemChangedEventArgs) Handles easyDAClient1.ItemChanged ' ReSharper restore InconsistentNaming DisplayVtq(e.Vtq) DisplayException(e.Exception) End Sub ' ReSharper disable InconsistentNaming Private Sub browseMachinesButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles browseMachinesButton.Click ' ReSharper restore InconsistentNaming If computerBrowserDialog1.ShowDialog() = DialogResult.OK Then machineNameTextBox.Text = computerBrowserDialog1.SelectedName End If End Sub ' ReSharper disable InconsistentNaming Private Sub aboutButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles aboutButton.Click ' ReSharper restore InconsistentNaming MessageBox.Show(Me, Reflection.Assembly.GetExecutingAssembly().FullName, "Assembly Name", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub ' ReSharper disable InconsistentNaming Private Sub browsePropertiesButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles browsePropertiesButton.Click ' ReSharper restore InconsistentNaming opcDAPropertyDialog1.ServerDescriptor.MachineName = machineNameTextBox.Text opcDAPropertyDialog1.ServerDescriptor.ServerClass = serverClassTextBox.Text opcDAPropertyDialog1.NodeDescriptor = itemIdTextBox.Text If opcDAPropertyDialog1.ShowDialog() = DialogResult.OK Then propertyIdMaskedTextBox.Text = opcDAPropertyDialog1.PropertyElement.PropertyId.ToString() End If End Sub ' ReSharper disable InconsistentNaming Private Sub getPropertyValueButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles getPropertyValueButton.Click ' ReSharper restore InconsistentNaming Dim propertyId As Integer = Convert.ToInt32(propertyIdMaskedTextBox.Text, CultureInfo.CurrentCulture) Dim value As Object = Nothing Dim exception As Exception = Nothing Try value = easyDAClient1.GetPropertyValue(machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, propertyId) Catch ex As OpcException exception = ex End Try propertyValueTextBox.Text = (If(value Is Nothing, "(null)", String.Format(CultureInfo.CurrentCulture, "{0}", value))) DisplayException(exception) End Sub ' ReSharper disable InconsistentNaming Private Sub writeItemValueButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles writeItemValueButton.Click ' ReSharper restore InconsistentNaming Dim value As Object = valueToWriteTextBox.Text Dim exception As Exception = Nothing Try easyDAClient1.WriteItemValue(machineNameTextBox.Text, serverClassTextBox.Text, itemIdTextBox.Text, value) Catch ex As OpcException exception = ex End Try DisplayException(exception) End Sub ' ReSharper disable InconsistentNaming Private Sub closeButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles closeButton.Click ' ReSharper restore InconsistentNaming Close() End Sub ' ReSharper disable InconsistentNaming Private Sub MainForm_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load ' ReSharper restore InconsistentNaming End Sub End Class End Namespace
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved.
Send Documentation Feedback. Technical Support